package com.anyuan.wx.util;

public class byteArray2String {

	/**
	 * @param args
	 * 很多加密方法比如sha1加密字符串结果是一个字节数组，如果在本地需要验证，往往需要一个字符串，所以需要把字节数组转化为字符串
	 * 思路：1个字节二进制表示需要8位，16进制的一个字符需要用4位二进制位来表示，因此用2个16进制字符表示一个1节，即把1个字节拆分成2个相应的16进制字符，即1个字节的高4位和低4位
	 * 分别转化成16进制字符H和L,并组合起来得到byte转化到16进制字符串的结果
	 */
	
	/**
	 * ASCii码中，一个英文字母代表一个字节，一个中文代表2个字节;字节不管用0x01还是1或者00000001表示，计算机通过byteToHexStr高低位运算
	 * 均能自动换算成16进制的2个字符，并组合成一个字符串
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		byte a = -3;
		byte[] b = {a,'c'};
		System.out.println(byteToHexStr(a));
		System.out.println(byteToStr(b));

	}
	
	private static String byteToStr(byte[] bytearray){
		String strDigest = "";
		for(int i = 0;i<bytearray.length;i++){
			strDigest += byteToHexStr(bytearray[i]);
		}
		return strDigest;
				
	}
	
	private static String byteToHexStr(byte ib){
		char[] Digit = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
		char[] ob = new char[2];
		ob[0] = Digit[(ib >>> 4) & 0X0F];
		ob[1] = Digit[ib & 0X0F];
		
		String s = new String(ob);
	    return s;
	}
	
	

}
